C#网络编程

串口通信

作者:陈广 日期:2019-1-14


串口通信(Serial Communications)是一种早期的通信方式,它简单、易于实现、可靠性高、搞干扰能力强。现在仍在广泛使用,特别是在工业领域,比如工厂的电磁环境比较复杂,干扰大,很多时候仍在使用串口通信。早期的电脑上还存在串口(如下图所示),供鼠标、键盘、游戏手柄等设备使用,以及并口(又称打印口),供打印机使用。现在全被 USB 接口取代了。

图 1: 运行程序

串行通信与并行通信

计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。可以分为两大类:并行通信串行通信

并行通信通常是将数据字节的各个位用多条数据线同时进行传送。

图 2: 并行通信

并行通信控制简单、传输速度快,由于传输线较多,长距离传送时成本高且接收方的各个位同时接收存在困难。

串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。

图 3: 串行通信

串行通信的特点是传输线少,长距离传送时成本低,但数据的传送控制比并行通信复杂。

下表对串行通信与并行通信进行了对比:

串行通信 并行通信
通信距离
搞干扰能力
传输速度
成本

串行通信的基本概念

通信方式

串行通信的通信方式有异步通信与同步通信之分。

同步通信时,双方有一个共同的时钟,当发送时,接收方同时准备接收。

异步通信时,双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息,如开始位;结束时有停止位

异步通信

异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。

异步通信是以字符(一个字符为8个bit,构成一帧)为单位进行传输的,字符与字符之间的间隙(时间间隔)是任意的,但每个字符的各个位是以固定的时间传送的,每传送一个字符就用起始位来进行收、发双方同步,不会因为收发双方的时钟频率的小的偏差导致错误。

异步通信的特点是不要求收发双方时钟的严格一致,易于实现,设备开销较小,但每个字符要附加2~3位用于起止位,各帧之间还有间隔,因此传输效率不高。

现在单片机中广泛使用的 UART 通信是一个串行异步通信的典型代码。要使得通信双方能够正确的收发数据,需要匹配双方的串口参数,主要有:串口号、波特率、数据位、校验位和停止位等。

同步通信

同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,双方同频工作,步调一致,不再需要起止位以及帧间的间隔。同步通信以特定的位组合01111110作为帧的开始和结束标志,所传输的一帧数据可以是任意数量的位。

同步通信的优点是可以实现高速度、大容量的数据传送;缺点是要求发生时钟和接收时钟保持严格同步,实现的硬件设备比异步通信复杂。同步通信的典型代表如单片机开发板内部使用的 SPI、IIC。

传输方向

单工

单工(simplex)通信是指数据传输仅能沿一个方向,不能实现反向传输。比如我们使用的卫星导航系统,手机可以接收到导航卫星的 GPS 信号,并通过这个信号计算出当前所处位置,但手机并不能向卫星发送信号。

半双工

半双工(Half-duplex)通信允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输。比如传统的对讲机,一方讲完后,需设法告知对方讲话结束,在后面加上“OVER”,另一方听到“OVER”后才知道可以开始讲话。如果双方同时处于发送状态,便不能进行正常通信了。

全双工

全双工(Full Duplex)通信允许数据同时在两个方向上传输,即有两个信道,因此允许同时进行双向传输。电话和手机都是全双工通信方式,在讲话的同时也可以听到对方的声音。

传输速率

有两个比较容易混淆的概念,是波特率及比特率,下面一一介绍。

比特率

比特率(bit rate)又称传信率、信息传输速率(简称信息速率,information rate)。其定义是:通信线路(或系统)单位时间(每秒)内传输的信息量,即每秒能传输的二进制位数,通常用 Rb 表示,其单位是比特/秒(bit/s或b/s,英文缩略语为 bps)。

  在二进制系统中,信息速率(比特率)与信号速率(波特率)相等,例如,当系统以每秒50个二进制符号传输时,信息速率为 50bit/s,信号速率也为 50Bd(波特)。在无调制的情况下,比特率等于波特率;采用调相技术时,比特率不等于波特率。通信系统的发送设备和接收设备必须在相同的波特率下工作,否则会出现帧同步错误。

波特率

波特率(Baud rate)又称传码率、码元传输速率(简称码元速率)、信号传输速率(简称信号速率,signaling rate)或调制速率。其定义是:通信线路(或系统)单位时间(每秒)内传输的码元(脉冲)个数;或者表示信号调制过程中,单位时间内调制信号波形的变换次数,通常用RB表示,单位是波特(Bd或Baud,前者规范)。如果每秒传输1个码元就称为1Bd;如果1码元的时间长短为200ms,则每秒可传输5个码元,那么码元速率(波特率)就是5Bd。

波特率(码元速率)并没有限定是何种进制的码元,所以给出波特率时必须说明这个码元的进制。例如,波特率为600Bd,则在二进制时,比特率也为600bit/s;在四进制时,由于lb4=2,所以比特率为1200bit/s。可见,在一个码元中可以传送多个比特。

比特率很容易和波特率混淆在一起。举个例子来说明它们的区别,比如在信号传输过程中,0V 电压表示数字 0,3V 电压表示数字1,则每一次传输可以发送一个二进制数字。但如果 0V 电压表示数字 0,2V 电压表示数字 1,4V 电压表示数字 2,6V 电压表示数字 3。则每一次传输则可以发送一个四进制数字。此时它所包含的信息量就是二进制的 2 倍,比特率就是波特率的2倍。一般情况下,传输的都是二进制,所以比特率和波特率相等。

串行通信的错误校验

奇偶校验

在发送数据时,数据位尾随的1位为奇偶校验位(1或0)。奇校验时,数据中1的个数与校验位1的个数之和应为奇数;偶校验时,数据中1的个数与校验位1的个数之和应为偶数。接收字符时,对1的个数进行校验,若发现不一致,则说明传输数据过程中出现了差错。

代码和校验

代码和校验是发送方将所发数据块求和(或各字节异或),产生一个字节校验字符(校验和)附加到数据块末尾。接收方接收数据同时对数据块(除校验字节外)求和(或各字节异或),将所得的结果与发送方的“校验和”进行比较,相符则无差错,否则即认为传送过程中出现了差错。

循环冗余校验

这种校验是通过某种数字运算实现有效信息与校验位之间的循环校验,常用于对磁盘信息的传输、存储区的完整性校验等。这种校验方法纠错能力强,广泛应用于同步通信中。

串行通信接口标准

常见的串口协议有 RS-232、RS-422、RS-485 等,下面进行一一介绍。

RS-232

RS-232 是美国电子工业协会EIA(Electronic Industry Association)制定的一种串行物理接口标准。RS 是英文“推荐标准”的缩写,232 为标识号。RS-232是对电气特性以及物理特性的规定,只作用于数据的传输通路上,它并不内含对数据的处理方式。需要说明一下,很多人经常把 RS-232、RS-422、RS-485 误称为通讯协议,这是很不应该的,其实它们仅是关于 UART 通讯的一个机械和电气接口标准(顶多是网络协议中的物理层面)。

RS-232C 接口(又称 EIA RS-232C)是目前最常用的一种串行通讯接口。该标准规定采用一个 25 个脚的 DB-25 连接器,对连接器的每个引脚的信号内容加以规定,还对各种信号的电平加以规定。

图 4: RS-232-C DB-25 接口

后来 IBM 的PC 机将 RS-232C 简化成了 DB-9 连接器,从而成为今天的事实标准。而工业控制的 RS-232C 口一般只使用 RXD(2)、TXD(3)、GND(5) 三条线。

图 5: RS-232-C DB-9 接口

在 TXD(信号发送) 和 RXD(信号接收) 引脚上,-3 ~ -15V 表示逻辑1;+3 ~ +15V 表示逻辑0

采用 RS-232C 接口存在如下问题:

  1. 传输距离短,传输速率低:RS-232C总线标准受电容允许值的约束,使用时传输距离一般不起过15米(线路条件好时也不超过几十米)。最高传送速率为20Kbps。
  2. 有电平偏移:RS-232C 总线标准要求收发双方共地。通信距离较大时,收发双方的地电位差别较大,在信号地上将有比较大的地电流并产生压降。
  3. 抗干扰能力差:RS-232C 在电平转换时采用单端输入输出,在传输过程中当干扰噪声混在正常的信号中。为了提高信噪比,RS-232C 总线标准不得不采用比较大的电压摆幅。

RS-232 缺省波特率为 9600,常见的还有 1200、2400、4800、19200、38400等。波特率越大,传输速度越快,但稳定的传输距离越短,抗干扰能力越差。

RS-485

RS-232 接口可以实现点对点的通信方式,但这种方式不能实现联网功能。于是,为了解决这个问题,一个新的标准 RS-485 产生了。在要求通信距离为几十米到上千米时,广泛采用RS-485 串行总线标准。RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。加上总线收发器具有高灵敏度,能检测低至 200mV 的电压,故传输信号能在千米以外得到恢复。 RS-485采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。RS-485用于多点互连时非常方便,可以省掉许多信号线。应用 RS-485 可以联网构成分布式系统,其允许最多并联32台驱动器和32台接收器。

RS-422

RS-422 的电气性能与 RS-485 完全一样。主要的区别在于:RS-422 有 4 根信号线:两根发送、两根接收。由于 RS-422 的收与发是分开的所以可以同时收和发(全双工),也正因为全双工要求收发要有单独的信道,所以 RS-422 适用于两个站之间通信,星型网、环网,不可用于总线网;RS-485 只有2 根信号线,所以只能工作在半双工模式,常用于总线网。

UART

随着技术的发展,工业上还有 RS-232 串口通信的大量使用,但是商业技术的应用上,已经慢慢地使用 USB 转 UART 技术取代了 RS-232 串口。UART(Universal Asynchronous Receiver/Transmitter 通用异步收发器),通常用于单片机和计算机之间以及单片机和单片机之间的通信。很多的单片机芯片内部都会集成有几个 UART 接口。

UART 指的是使用 TTL 电平的串口。RS-232 使用 3 ~ 15V 有效电平,而 UART 对电气特性并没有规定,所以直接使用 CPU 所使用的电平,就是所谓的 TTL 电平(一般在 0 ~ 3.3V 之间)。UART 与 RS-232 的区别在于 UART 是一种通信协议,而 RS-232 和 RS-485 是规定了数据通信的电气特性,是物理层的概念。

USART

USART(Universal Synchronous/Asynchronous Receiver/Transmitter 通用同步/异步收发器)。从名字上可以看出,USART 在 UART 基础上增加了同步功能,即 USART 是 UART 的增强型。其实当我们使用 USART 在异步通信的时候,它与 UART 没有什么区别,但是用在同步通信的时候,区别就很明显了:大家都知道同步通信需要时钟来触发数据传输,也就是说 USART 相对 UART 的区别之一就是能提供主动时钟。

UART 数据通信格式

UART 的数据通信格式如下图所示:

图 6:UART 的数据通信格式

其中各位的意义如下:

  • 起始位:先发出一个逻辑0信号,表示传输字符的开始。
  • 数据位:紧接着起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用 ASCII 码。从最低位开始传送(小端传输),靠时钟定位。
  • 校验位:数据位加上这一位后,使得1的位数应为偶数(偶校验)或奇数(奇校验)。
  • 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率也就越慢。
  • 空闲位:处于逻辑1状态,表示当前线路上没有资料传送。
;

© 2018 - IOT小分队文章发布系统 v0.3